From: Jasper St. Pierre Date: Thu, 28 Feb 2013 21:08:19 +0000 (-0500) Subject: workspace: Fix bad window positions with small windows X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~4620 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=083c37a7b25fc1e5771d376848ab55a2e673a773;p=gnome-shell.git workspace: Fix bad window positions with small windows This can happen if you open two or three terminal windows, and then open the overview -- they're not centered. The issue is that because of the WINDOW_CLONE_MAXIMUM_SCALE clamping, the scale that is being laid out is different from the scale that the layout was calculated for. Implement and document a hack-ish solution which simply keeps the scale for the layout as originally calculated, but centers the windows inside the cell. https://bugzilla.gnome.org/show_bug.cgi?id=694902 --- diff --git a/js/ui/workspace.js b/js/ui/workspace.js index abc42202a..a3cd6a870 100644 --- a/js/ui/workspace.js +++ b/js/ui/workspace.js @@ -631,8 +631,9 @@ const WindowPositionFlags = { // must always be true. This is for each individual window -- while we // could adjust layoutScale to make the largest thumbnail smaller than // WINDOW_CLONE_MAXIMUM_SCALE, it would shrink windows which are already -// under the inequality. This is a difficult issue, and right now is -// unsolved -- it will generate bad layouts. +// under the inequality. To solve this, we simply cheat: we simply keep +// each window's "cell" area to be the same, but we shrink the thumbnail +// and center it horizontally, and align it to the bottom vertically. const LayoutStrategy = new Lang.Class({ Name: 'LayoutStrategy', @@ -770,13 +771,17 @@ const LayoutStrategy = new Lang.Class({ let window = row.windows[j]; let s = scale * this._computeWindowScale(window); + let cellWidth = window.actor.width * s; + let cellHeight = window.actor.height * s; + s = Math.min(s, WINDOW_CLONE_MAXIMUM_SCALE); - let width = window.actor.width * s; - let height = window.actor.height * s; - let y = row.y + row.height - height; + let cloneWidth = window.actor.width * s; + + let cloneX = x + (cellWidth - cloneWidth) / 2; + let cloneY = row.y + row.height - cellHeight; - slots.push([x, y, s, window]); - x += width + this._columnSpacing; + slots.push([cloneX, cloneY, s, window]); + x += cellWidth + this._columnSpacing; } } return slots;